home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-10-26 | 15.4 KB | 996 lines |
- (*----------------------------------------------------------------------*
- * *
- * MAGIC Modula's All purpose GEM Interface Cadre *
- * ÿ ÿ ÿ ÿ ÿ *
- *----------------------------------------------------------------------*
- * Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Dieses Modul ist urheberrechtlich geschtzt. *
- * *
- * Die Verffentlichung des Quelltextes oder Teilen daraus in schrift- *
- * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung *
- * ber Public-Domain-Hndler bedarf der ausdrcklichen schriftlichen *
- * Genehmigung des Autors! *
- * *
- * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
- * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins- *
- * besondere dieser Urheberrechts-Vermerk nicht verndert wird, und *
- * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor *
- * behlt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
- * von Grnden zu widerrufen. *
- *----------------------------------------------------------------------*)
-
- IMPLEMENTATION MODULE MagicXBIOS;
-
- (*----------------------------------------------------------------------*
- * Int. Vers | Datum | Name | nderung *
- *-----------+----------+------+----------------------------------------*
- * 3.00 | 18.01.92 | Hp | *
- *-----------+----------+------+----------------------------------------*)
-
-
-
- (* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
- (* *)
- (*$R- Range-Checks *)
- (*$S- Stack-Check *)
- (* *)
- (*----------------------------------------------*)
-
-
-
-
-
-
- FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
- Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
- Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
- sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
- CastToChar, CastToByte, CastToByteset, CastToInt,
- CastToCard, CastToBitset, CastToWord, CastToLInt,
- CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
- TosVersion, Accessory, Basepage, SysHeader, TosDate;
-
-
-
-
-
-
- FROM SYSTEM IMPORT ADDRESS, ADR, WORD, BYTE;
- IMPORT MagicSys;
-
-
- FROM SYSTEM IMPORT ASSEMBLER;
- VAR c: sCARDINAL;
- i: sINTEGER;
- l: lINTEGER;
-
-
-
-
-
- VAR a, b, d: ADDRESS;
-
- PROCEDURE Initmouse (type: sINTEGER; VAR param: ARRAY OF LOC; vec: PROC);
- VAR a: ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.L vec(A6), -(SP)
- MOVE.L param(A6), -(SP)
- MOVE.W type(A6), -(SP)
- MOVE.W #0, -(SP);
- TRAP #14
- LEA 12(SP), SP
- END;
-
-
-
-
- END Initmouse;
-
- PROCEDURE Physbase (): ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W #2, -(SP);
- TRAP #14
- ADDQ.L #2, SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Physbase;
-
- PROCEDURE Logbase (): ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W #3, -(SP);
- TRAP #14
- ADDQ.L #2, SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Logbase;
-
- PROCEDURE Getrez (): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W #4, -(SP);
- TRAP #14
- ADDQ.L #2, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Getrez;
-
- PROCEDURE Setscreen (log, phys: ADDRESS; rez: sINTEGER);
- BEGIN
-
- ASSEMBLER
- MOVE.W rez(A6), -(SP)
- MOVE.L phys(A6), -(SP)
- MOVE.L log(A6), -(SP)
- MOVE.W #5, -(SP)
- TRAP #14
- LEA $C(SP), SP
- END;
-
-
-
-
- END Setscreen;
-
- PROCEDURE Setpalette (VAR palette: ARRAY OF LOC);
- BEGIN
-
- ASSEMBLER
- MOVE.L palette(A6), -(SP)
- MOVE.W #6, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Setpalette;
-
- PROCEDURE Setcolor (colNum, color: sCARDINAL): sCARDINAL;
- VAR c: sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W color(A6), -(SP)
- MOVE.W colNum(A6), -(SP)
- MOVE.W #7, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, c(A6)
- END;
- RETURN c;
-
-
-
-
- END Setcolor;
-
- PROCEDURE Floprd (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W count(A6), -(SP)
- MOVE.W side(A6), -(SP)
- MOVE.W trck(A6), -(SP)
- MOVE.W sec(A6), -(SP)
- MOVE.W drv(A6), -(SP)
- MOVE.L #0, -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W #8, -(SP)
- TRAP #14
- LEA $14(SP), SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Floprd;
-
- PROCEDURE Flopwr (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W count(A6), -(SP)
- MOVE.W side(A6), -(SP)
- MOVE.W trck(A6), -(SP)
- MOVE.W sec(A6), -(SP)
- MOVE.W drv(A6), -(SP)
- MOVE.L #0, -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W #9, -(SP)
- TRAP #14
- LEA $14(SP), SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Flopwr;
-
- PROCEDURE Flopfmt (buf: ADDRESS; drv, spt, trck, side, il, virgin: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W virgin(A6), -(SP)
- MOVE.L #$087654321, -(SP)
- MOVE.W il(A6), -(SP)
- MOVE.W side(A6), -(SP)
- MOVE.W trck(A6), -(SP)
- MOVE.W spt(A6), -(SP)
- MOVE.W drv(A6), -(SP)
- MOVE.L #0, -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W #10, -(SP)
- TRAP #14
- LEA $1A(SP), SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Flopfmt;
-
- PROCEDURE Midiws (VAR string: ARRAY OF LOC; len: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.L string(A6), -(SP)
- MOVE.W len(A6), -(SP)
- MOVE.W #12, -(SP)
- TRAP #14
- ADDQ.L #8, SP
- END;
-
-
-
-
- END Midiws;
-
- PROCEDURE Mfpint (intNo: sCARDINAL; vector: PROC);
- VAR x: ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.L vector(A6), -(SP)
- MOVE.W intNo(A6), -(SP)
- MOVE.W #13, -(SP)
- TRAP #14
- ADDQ.L #8, SP
- END;
-
-
-
-
- END Mfpint;
-
- PROCEDURE Iorec (dev: sINTEGER): ADDRESS;
- VAR a: ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W dev(A6), -(SP)
- MOVE.W #14, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.L D0, a(A6)
- END;
- RETURN a;
-
-
-
-
- END Iorec;
-
- PROCEDURE Rsconf (speed: sINTEGER; flavor: sBITSET; u, r, t, s: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W s(A6), -(SP)
- MOVE.W t(A6), -(SP)
- MOVE.W r(A6), -(SP)
- MOVE.W u(A6), -(SP)
- MOVE.W flavor(A6), -(SP)
- MOVE.W speed(A6), -(SP)
- MOVE.W #15, -(SP)
- TRAP #14
- LEA $E(SP), SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Rsconf;
-
- PROCEDURE Keytbl (VAR unshift, shift, capslock: ADDRESS): ADDRESS;
- BEGIN
-
- a:= unshift;
- b:= shift;
- d:= capslock;
- ASSEMBLER
- MOVE.L a, -(SP)
- MOVE.L b, -(SP)
- MOVE.L d, -(SP)
- MOVE.W #16, -(SP)
- TRAP #14
- LEA $E(SP), SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Keytbl;
-
- PROCEDURE Random(): lCARDINAL;
- VAR l: lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #17, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- MOVE.L D0, l(A6)
- END;
- RETURN l;
-
-
-
-
- END Random;
-
- PROCEDURE Protobt (buf: ADDRESS; num: lINTEGER; typ, exec: sINTEGER);
- BEGIN
-
- ASSEMBLER
- MOVE.W exec(A6), -(SP)
- MOVE.W typ(A6), -(SP)
- MOVE.L num(A6), -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W #18, -(SP)
- TRAP #14
- LEA $E(SP), SP
- END;
-
-
-
-
- END Protobt;
-
- PROCEDURE Flopver (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W count(A6), -(SP)
- MOVE.W side(A6), -(SP)
- MOVE.W trck(A6), -(SP)
- MOVE.W sec(A6), -(SP)
- MOVE.W drv(A6), -(SP)
- MOVE.L #0, -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W #19, -(SP)
- TRAP #14
- LEA $E(SP), SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Flopver;
-
- PROCEDURE Scrdmp;
- BEGIN
-
- ASSEMBLER
- MOVE.W #20, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- END;
-
-
-
-
- END Scrdmp;
-
- PROCEDURE Cursconf (function, operand: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W operand(A6), -(SP)
- MOVE.W function(A6), -(SP)
- MOVE.W #21, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Cursconf;
-
- PROCEDURE Settime (datetime: lCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W datetime(A6), -(SP)
- MOVE.W #22, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Settime;
-
- PROCEDURE Gettime (): lCARDINAL;
- VAR l: lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #23, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- MOVE.L D0, l(A6)
- END;
- RETURN l;
-
-
-
-
- END Gettime;
-
- PROCEDURE Bioskeys;
- BEGIN
-
- ASSEMBLER
- MOVE.W #24, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- END;
-
-
-
-
- END Bioskeys;
-
- PROCEDURE Ikbdws (str: ARRAY OF LOC; len: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.L str(A6), -(SP)
- MOVE.W len(A6), -(SP)
- MOVE.W #25, -(SP)
- TRAP #14
- ADDQ.L #8, SP
- END;
-
-
-
-
- END Ikbdws;
-
- PROCEDURE Jdisint (intNo: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W intNo(A6), -(SP)
- MOVE.W #26, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Jdisint;
-
- PROCEDURE Jenabint (intNo: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W intNo(A6), -(SP)
- MOVE.W #27, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Jenabint;
-
- PROCEDURE Giaccess (regno: sCARDINAL; data: Byte): sCARDINAL;
- VAR c: sCARDINAL;
- BEGIN
-
- c:= ORD (data);
- ASSEMBLER
- MOVE.W regno(A6), -(SP)
- MOVE.W c(A6), -(SP)
- MOVE.W #28, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, c(A6)
- END;
- RETURN c;
-
-
-
-
- END Giaccess;
-
- PROCEDURE Offgibit (bitno: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W bitno(A6), -(SP)
- MOVE.W #29, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Offgibit;
-
- PROCEDURE Ongibit (bitno: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W bitno(A6), -(SP)
- MOVE.W #30, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Ongibit;
-
- PROCEDURE Xbtimer (timer, control, data: sCARDINAL; vec: PROC);
- BEGIN
-
- ASSEMBLER
- MOVE.L vec(A6), -(SP)
- MOVE.W data(A6), -(SP)
- MOVE.W control(A6), -(SP)
- MOVE.W timer(A6), -(SP)
- MOVE.W #31, -(SP)
- TRAP #14
- LEA $C(SP), SP
- END;
-
-
-
-
- END Xbtimer;
-
- PROCEDURE Dosound (REF data: ARRAY OF LOC);
- BEGIN
-
- ASSEMBLER
- MOVE.L data(A6), -(SP)
- MOVE.W #32, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Dosound;
-
- PROCEDURE Setprt (config: sBITSET): sBITSET;
- VAR b: sBITSET;
- BEGIN
-
- ASSEMBLER
- MOVE.W config(A6), -(SP)
- MOVE.W #33, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, b(A6)
- END;
- RETURN b;
-
-
-
-
- END Setprt;
-
- PROCEDURE Kbdvbase(): ADDRESS;
- VAR a: ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W #34, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- MOVE.L D0, a(A6)
- END;
- RETURN a;
-
-
-
-
- END Kbdvbase;
-
- PROCEDURE Kbrate (initial, repeat: sINTEGER): sCARDINAL;
- VAR c: sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W repeat(A6), -(SP)
- MOVE.W initial(A6), -(SP)
- MOVE.W #35, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, c(A6)
- END;
- RETURN c;
-
-
-
-
- END Kbrate;
-
- PROCEDURE Prtblk (block: ARRAY OF LOC);
- BEGIN
-
- ASSEMBLER
- MOVE.L block(A6), -(SP)
- MOVE.W #36, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Prtblk;
-
- PROCEDURE Vsync;
- BEGIN
-
- ASSEMBLER
- MOVE.W #37, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- END;
-
-
-
-
- END Vsync;
-
- PROCEDURE Supexec (code: ADDRESS);
- BEGIN
-
- ASSEMBLER
- MOVE.L code(A6), -(SP)
- MOVE.W #38, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Supexec;
-
- PROCEDURE Puntaes;
- BEGIN
-
- ASSEMBLER
- MOVE.W #39, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- END;
-
-
-
-
- END Puntaes;
-
- PROCEDURE Blitmode (flag: sINTEGER): sBITSET;
- VAR b: sBITSET;
- BEGIN
-
- ASSEMBLER
- MOVE.W flag(A6), -(SP)
- MOVE.W #64, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.W D0, b(A6)
- END;
- RETURN b;
-
-
-
-
- END Blitmode;
-
- PROCEDURE Floprate (devno: sCARDINAL; newrate: sINTEGER): sINTEGER;
- VAR i: sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W newrate(A6), -(SP)
- MOVE.W devno(A6), -(SP)
- MOVE.W #65, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, i(A6)
- END;
- RETURN i;
-
-
-
-
- END Floprate;
-
- PROCEDURE DMAread (sec: lINTEGER; cnt: sINTEGER; buf: ADDRESS;
- dev: sINTEGER): lINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W dev(A6), -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W cnt(A6), -(SP)
- MOVE.L sec(A6), -(SP)
- MOVE.W #42, -(SP)
- TRAP #14
- LEA $E(SP), SP
- MOVE.L D0, l
- END;
- RETURN l;
-
-
-
-
- END DMAread;
-
- PROCEDURE DMAwrite (sec: lINTEGER; cnt: sINTEGER; buf: ADDRESS;
- dev: sINTEGER): lINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W dev(A6), -(SP)
- MOVE.L buf(A6), -(SP)
- MOVE.W cnt(A6), -(SP)
- MOVE.L sec(A6), -(SP)
- MOVE.W #43, -(SP)
- TRAP #14
- LEA $E(SP), SP
- MOVE.L D0, l
- END;
- RETURN l;
-
-
-
-
- END DMAwrite;
-
- PROCEDURE Bconmap (dev: sINTEGER): ADDRESS; (* ??? *)
- BEGIN
-
- ASSEMBLER
- MOVE.W dev(A6), -(SP)
- MOVE.W #44, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.W D0, a
- END;
- RETURN a;
-
-
-
-
- END Bconmap;
-
- PROCEDURE NVMaccess (mode, start, cnt: sINTEGER; buf: ADDRESS): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L buf(A6), -(SP)
- MOVE.W cnt(A6), -(SP)
- MOVE.W start(A6), -(SP)
- MOVE.W mode(A6), -(SP)
- MOVE.W #46, -(SP)
- TRAP #14
- LEA $C(SP), SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END NVMaccess;
-
- PROCEDURE EsetShift (mode: sINTEGER);
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.W #80, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- END;
-
-
-
-
- END EsetShift;
-
- PROCEDURE EgetShift (): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W #81, -(SP)
- TRAP #14
- ADDQ.L #2, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EgetShift;
-
- PROCEDURE EsetBank (bank: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W bank(A6), -(SP)
- MOVE.W #82, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EsetBank;
-
- PROCEDURE EsetColor (num, col: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W col(A6), -(SP)
- MOVE.W num(A6), -(SP)
- MOVE.W #83, -(SP)
- TRAP #14
- ADDQ.L #6, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EsetColor;
-
- PROCEDURE EsetPalette (start, cnt: sINTEGER; pal: ARRAY OF LOC): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L pal(A6), -(SP)
- MOVE.W cnt(A6), -(SP)
- MOVE.W start(A6), -(SP)
- MOVE.W #84, -(SP)
- TRAP #14
- LEA $A(SP), SP
- MOVE.W D0, i
- END;
- RETURN i
-
-
-
-
- END EsetPalette;
-
- PROCEDURE EgetPalette (start, cnt: sINTEGER; VAR pal: ARRAY OF LOC): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L pal(A6), -(SP)
- MOVE.W cnt(A6), -(SP)
- MOVE.W start(A6), -(SP)
- MOVE.W #85, -(SP)
- TRAP #14
- LEA $A(SP), SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EgetPalette;
-
- PROCEDURE EsetGray (mode: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.W #86, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EsetGray;
-
- PROCEDURE EsetSmear(mode: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.W #87, -(SP)
- TRAP #14
- ADDQ.L #4, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END EsetSmear;
-
- END MagicXBIOS.
-
-